// 引入自己封装的路由
import router from '@/router'

import store from '@/store'

router.beforeEach(async(to, from, next) => {
// 创建一个白名单
  const whiteList = ['/login', '404']
  if (store.getters.token) {
    if (to.path === '/login') {
      // 跳转到主页
      next('/')
    } else {
      // 这里有了 token 又不是到登录页
      // 后台正常放行的逻辑中
      // 就需要获取用户资料
      // await store.dispatch('user/getUserInfo')
      // 直接判断一个空对象, 其实永远是 true
      // 只能判断里面的其中一个属性在不在
      // const res = store.state.user
      // console.log(res)

      if (!store.state.user.userInfo.userId) {
        const res = await store.dispatch('user/getUserInfo')
        // 如果 action return 了数据, 这边可以直接获取
        console.log('触发筛选过程')
        console.log(res)

        //   permission/filterRoutes 调用permission.js文件里面的方法 filterRoutes
        const routes = await store.dispatch('permission/filterRoutes', res.roles.menus)
        // store.state.user.userInfo.roles.menus
        console.log(routes)

        // router.addRoutes(routes)
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        // 这里是第一次进入页面(刷新)获取用户资料
        // 用户资料里面有权限列表可以用来做筛选
        // 将筛选的逻辑放入到 vuex 里面
        // 需要准备两个数据 1. 全部的动态路由列表 2. 当前用户的信息

        // 如果是添加的路由, 添加的时间点其实晚于匹配过程, 发现一片空白
        // 需要在当前的目的地路径中原地跳一次, 重新触发匹配过程才行
        next(to.path)
      } else {
        next()
      }
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})
